// 题目：
// 对于字符串 s 和 t，只有在 s = t + t + t + ... + t + t（t 自身连接 1 次或多次）时，我们才认定 “t 能除尽 s”。

// 给定两个字符串 str1 和 str2 。返回 最长字符串 x，要求满足 x 能除尽 str1 且 x 能除尽 str2 。



// 示例 1：

// 输入：str1 = "ABCABC", str2 = "ABC"
// 输出："ABC"
// 示例 2：

// 输入：str1 = "ABABAB", str2 = "ABAB"
// 输出："AB"
// 示例 3：

// 输入：str1 = "LEET", str2 = "CODE"
// 输出：""


// 提示：

// 1 <= str1.length, str2.length <= 1000
// str1 和 str2 由大写英文字母组成

// 自己的答案（错误）：
/**
 * @param {string} str1
 * @param {string} str2
 * @return {string}
 */
var gcdOfStrings = function (str1, str2) {
    if ([...new Set(str1)].join('') === [...new Set(str2)].join('')) {
        return [...new Set(str2)].join('')
    } else {
        return ""
    }
};

// 错误输入输出：
// 输入
// str1 =
// "TAUXXTAUXXTAUXXTAUXXTAUXX"
// str2 =
// "TAUXXTAUXXTAUXXTAUXXTAUXXTAUXXTAUXXTAUXXTAUXX"

// 添加到测试用例
// 输出
// "TAUX"
// 预期结果
// "TAUXX"

// 官方答案：
var gcdOfStrings = function (str1, str2) {
    if (str1 + str2 !== str2 + str1) return ''
    const gcd = (a, b) => (0 === b ? a : gcd(b, a % b)) // 例如：ABCABC ABC 需要得到的 substring 的第二个参数是 3，ABCABCABC ABCABC 需要得到的 substring 的第二个参数也是 3
    return str1.substring(0, gcd(str1.length, str2.length))
};